package com.tbit.uqbike.client.service;

import com.tbit.uqbike.center.pojo.MachineStatus;
import com.tbit.uqbike.client.pojo.ParkPoint;
import com.tbit.uqbike.client.pojo.ParkPointVo;
import com.tbit.uqbike.client.pojo.Point;
import com.tbit.uqbike.client.pojo.User;

import java.util.List;
import java.util.Map;

/**
 * 停车点service
 *
 * @author Leon
 * 2017年2月24日 下午4:09:17
 */
public interface ParkPointService {

    /**
     * 根据平台账户id查询
     *
     * @param accountId
     * @return
     */
    List<ParkPoint> getByAccountId(Integer accountId);

    /**
     * 根据区域查询
     *
     * @param params
     * @return
     */
    List<ParkPoint> getByArea(Integer accountId, Double lo, Double la, Integer radius);

    /**
     * 根据区域查询代理商站点
     *
     * @param params
     * @return
     */
    List<ParkPoint> getAccountByArea(Integer accountId, Double lo, Double la, Integer radius);

    /**
     * 搜索附近停车点
     *
     * @param accountId
     * @param lo
     * @param la
     * @param radius
     * @return
     */
    List<ParkPoint> getNearParkPoint(User user, Integer accountId, Double lo, Double la,
                                     Integer radius, Integer mapType);

    /**
     * 还车查询
     *
     * @param accountId
     * @param lo
     * @param la
     * @param radius
     * @return
     */
    List<ParkPoint> getReturnByArea(Integer accountId, Double lo, Double la, Integer radius);

    /**
     * 查询停车点可用车辆状态
     *
     * @param parkPointId
     * @param accountId
     * @param lo
     * @param la
     * @param radius
     * @param mapType
     * @return
     */
    List<MachineStatus> getStatusByParkPoint(Integer parkPointId);

    /**
     * 根据停车点id查询
     *
     * @param parkPointId
     * @return
     */
    ParkPoint getByParkPointId(Integer parkPointId);

    /**
     * 检查是否在站点
     *
     * @param accountId
     * @param point
     * @return
     */
    Integer checkInParkPoint(Integer accountId, Point point, Integer machineId, Map<String, Double> distanceMap);

    /**
     * 查询站点运维人员手机号码
     *
     * @param parkPointId
     * @return
     */
    String getMaintainPhone(Integer parkPointId);

    /**
     * 获取最近一个停车点
     *
     * @param accountId
     * @param point
     * @param mapType
     * @return
     */
    ParkPoint getPark(Integer accountId, Point point, Integer mapType);

    /**
     * 获取垂直停车数据
     *
     * @param userCode
     * @return
     */
    ParkPointVo getVert(String userCode, Integer parkPointId, Double lon, Double lat);

    /**
     * 获取所有
     *
     * @param updateTime
     * @return
     */
    List<ParkPoint> getAll(String updateTime);

    /**
     * 获取站点数量
     *
     * @return
     */
    Integer getNumber();

}  